﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Noris.Tools.TraceVisualiser.Interface;
using Noris.Tools.TraceVisualiser.Support;
using Noris.Tools.TraceVisualiser.Forms;

namespace Noris.Tools.TraceVisualiser.TraceData
{
    internal class Func_MemoryFree : IFunctionGlobalProvider
    {
		#region IPlugin Members
		/// <summary>
		/// Příznak, že Plugin je aktivní ve standardním běhu (tj. při běžném užiavtelském spuštění).
		/// Plně funkční pluginy tedy vrací true.
		/// Pluginy, které jsou ve vývoji, vrací false, takové jsou zobrazeny / spouštěny pouze v aplikaci, která běží v režimu Debug.
		/// </summary>
		bool IPlugin.Active { get { return true; } }
		#endregion
		#region IFunctionGlobalMenuItem Members
        void IFunctionGlobalProvider.CreateMenuItems(FunctionGlobalDeclareArgs args)
        {
            args.MenuItems.Add(new FunctionMenuItem(10, "Uvolnit paměť", "Odstraní z paměti nepotřebná načtená data. Sníží se nároky na paměť, následně dojde k načtení jen potřebných položek k zobrazení.", ToolItemProperties.EnabledDependOnTrace,
                TraceVisualiser.Pics.PicLibrary16.MemoryRom,
                TraceVisualiser.Pics.PicLibrary22.MemoryRom));
        }
        /// <summary>
        /// Spuštění funkce
        /// </summary>
        /// <param name="args"></param>
        void IFunctionGlobalProvider.Run(FunctionGlobalRunArgs args)
        {
            this._MemoryFree(args);
        }
        #endregion
        #region Výkonná metoda
        private void _MemoryFree(FunctionGlobalRunArgs args)
        {
            MainAppForm appForm = Steward.MainForm as MainAppForm;
            if (appForm == null) return;

            TraceDocumentForm traceDocForm = appForm.TopMostTraceDocument;
            if (traceDocForm == null) return;

            traceDocForm.DataSource.MemoryFree();
        }
        #endregion
    }
}
